#include "cpu/exec/template-start.h"

#define instr call

static void do_execute() {
    // Step 1: 减少栈指针，并将返回地址（即当前 eip + 指令长度）压入栈中
    cpu.esp -= DATA_BYTE;  // 32 位：DATA_BYTE 为 4
    swaddr_write(cpu.esp, DATA_BYTE, cpu.eip + DATA_BYTE + 1, R_SS);  // 保存返回地址

    // printf("cpu.eip = 0x%x\n", cpu.eip);
    // Step 2: 跳转到目标地址
    cpu.eip += op_src->val;  // rel32 是一个带符号的立即数，符号扩展
    // printf("call cpu.esp = 0x%x\n", cpu.esp);

    // 打印汇编信息
    print_asm_template1();
}

make_instr_helper(si)  // 生成处理立即数（immediate）的代码


#include "cpu/exec/template-end.h"
